/**
 * Sumpu Inc.
 * Copyright (c) 2011-2012 All Rights Reserved. 
 */
package cn.sumpu.app.guoguojie.biz;

import java.util.Map;

import com.taobao.api.domain.TaobaokeItem;
import com.taobao.api.domain.TaobaokeReport;

import cn.sumpu.app.guoguojie.domain.DoingProduct;
import cn.sumpu.app.guoguojie.domain.Member;
import cn.sumpu.app.guoguojie.exception.AppBusinessException;
import cn.sumpu.app.guoguojie.util.PageModel;
import cn.sumpu.app.guoguojie.util.ProductBs;

/**
 * 淘宝开放平台（TOP）接口
 * 
 * @author nick
 * @version $Id: TopBiz.java, v 0.1 2012-8-10 上午10:28:47 nick Exp $
 */
public interface TopBiz {
    /**
     * 获取appkey.
     * 
     * @return appkey
     */
    String getAppkey();

    /**
     * 获取appsecret.
     * 
     * @return appsecret
     */
    String getAppsecret();

    /**
     * 获取url.
     * 
     * @return url
     */
    String getUrl();

    /**
     * 获取pid.
     * 
     * @return nick
     */
    String getPid();

    /**
     * 给果果街用户返现.
     * 
     * @throws AppBusinessException
     */
    void rebate() throws AppBusinessException;

    /**
     * 生成淘宝推广连接.
     * 
     * <pre>
     * guoguojieCommissionRate 参数请填写百分比的数字，比如比率为<t>56%</t>，就填写数字<t>0.56</t>
     * </pre>
     * 
     * @param member 会员
     * @param doingProduct 产品
     * @param guoguojieCommissionRate 果果街返利比率
     * @return 淘宝推广连接，如果非淘宝客商品，返回null
     */
    String genTaobaoLink(Member member, DoingProduct doingProduct, double guoguojieCommissionRate) throws AppBusinessException;

    /**
     * 生成淘宝推广连接.
     * 
     * <pre>
     * guoguojieCommissionRate 参数请填写百分比的数字，比如比率为<t>56%</t>，就填写数字<t>0.56</t>
     * </pre>
     * 
     * @param memberId
     * @param originalId
     * @param isMobile 是否是手机端
     * @param guoguojieCommissionRate 果果街返利比率
     * @return
     * @throws AppBusinessException
     */
    String genTaobaoLink(String memberId, String originalId, Boolean isMobile, double guoguojieCommissionRate) throws AppBusinessException;

    /**
     * 生成淘宝推广连接.
     * 
     * <pre>
     * guoguojieCommissionRate 参数请填写百分比的数字，比如比率为<t>56%</t>，就填写数字<t>0.56</t>
     * </pre>
     * 
     * @param memberId 会员标示符
     * @param originalId 淘宝产品genTaobaoLinkId
     * @param guoguojieCommissionRate 果果街返利比率
     * @return 淘宝推广连接，如果非淘宝客商品，返回null
     */
    String genTaobaoLink(String memberId, String originalId, double guoguojieCommissionRate) throws AppBusinessException;

    /**
     * 淘宝客商品转换.
     * 
     * 
     * @param memberId 会员标示符
     * @param originalId 淘宝产品Id
     * @return 淘宝客商品
     * @throws AppBusinessException 转换失败
     */
    TaobaokeItem convertTaobaoke(String memberId, String originalId) throws AppBusinessException;

    /**
     * author BruceZhang
     * @param originalId    淘宝商品ID
     * @return  淘宝商品信息
     * @throws AppBusinessException
     */
    ProductBs convertTaobao(String originalId) throws Exception;

    /**
     * 淘宝客商品转换.
     * 
     * @param member 会员
     * @param doingProduct 产品
     * @return 淘宝客商品
     * @throws AppBusinessException 转换失败
     */
    TaobaokeItem convertTaobaoke(Member member, DoingProduct doingProduct) throws AppBusinessException;

    /**
     * 根据淘宝主动通知消息刷新商品信息.
     * 
     * @param message 淘宝通知消息
     */
    void refreshProduct(String message);

    /**
     * 订阅淘宝商品变更主动通知消息.
     * 
     * @param doingProduct 商品
     */
    void subscribe(DoingProduct doingProduct);

    /**
     * 获取淘宝客报表.
     * 
     * @author BruceZhang
     * @param sessionkey 会话令牌
     * @param date 日期（yyyyMMdd）  
     * @throws AppBusinessException 获取失败
     */
    void obtainTaobaokeReport(String date, String sessionkey) throws Exception;

    /**
     * 在线实时查询淘宝客报表.
     * 
     * @author BruceZhang
     * @param date          日期
     * @param pageSize      条数
     * @param pageNo        页数
     * @return  淘宝客报表
     * @throws AppBusinessException 查询失败
     */
    TaobaokeReport getReport(String date, Long pageSize, Long pageNo, String sessionkey) throws AppBusinessException;

    /**
     * 按条件分页检索淘宝客报表记录
     * 
     * @param map 检索条件
     * @return 淘宝客报表记录
     * @throws AppBusinessException 检索失败
     */
    PageModel getTaobaokeReport(Map<String, Object> map) throws AppBusinessException;

}
